home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-08-23 | 2.1 KB | 90 lines | [TEXT/????] |
- SYSTEM image_rotation;
-
- CONST m_size = 8;
-
- CONFIGURATION Pic [m_size],[m_size];
- CONNECTION right : Pic [i, j] -> Pic [i, j+1].left;
- left : Pic [i, j] -> Pic [i, j-1].right;
- up : Pic [i, j] -> Pic [i+1, j].down;
- down : Pic [i, j] -> Pic [i-1, j].up;
-
- SCALAR pic_size, size2: INTEGER;
- i,j : INTEGER;
- picture : ARRAY [0..m_size-1],[0..m_size-1] OF INTEGER;
-
- VECTOR color, buffer,b2: INTEGER;
- x,y : INTEGER;
-
- BEGIN
- (* init *)
- pic_size := m_size;
- (* create test pattern *)
- FOR i:=0 TO m_size-1 DO
- FOR j:=0 TO m_size-1 DO
- picture[i,j] := 0
- END;
- END;
- FOR i:=0 TO m_size-1 DO
- picture[i,i] := 1;
- END;
- FOR i:=1 TO 5 DO
- picture[0,i] := 1;
- picture[i,0] := 1;
- END;
-
- (* print original image *)
- WriteLn;
- WriteString(" ORIGINAL IMAGE");
- WriteLn;
- FOR i:=m_size-1 TO 0 BY -1 DO
- FOR j:=0 TO m_size-1 DO
- WriteInt(picture[i,j],2)
- END;
- WriteLn;
- END;
-
- LOAD(color, picture);
-
- WHILE pic_size > 1 DO
- size2 := pic_size DIV 2;
- PARALLEL
- y := DIM1 MOD pic_size;
- x := DIM2 MOD pic_size;
-
- buffer := color;
- IF x < size2 THEN PROPAGATE.up ^size2 (buffer);
- (* Upper Left Quadrant *)
- IF y>=size2 THEN b2 := buffer END
- ELSE PROPAGATE.down^size2 (buffer);
- (* Lower Right Quadrant *)
- IF y< size2 THEN b2 := buffer END
- END;
-
- buffer := color;
- IF y < size2 THEN PROPAGATE.left ^size2 (buffer);
- (* Lower Left Quadrant *)
- IF x< size2 THEN b2 := buffer END
- ELSE PROPAGATE.right^size2 (buffer);
- (* Upper Right Quadrant *)
- IF x>=size2 THEN b2 := buffer END
- END;
-
- color := b2; (* copy new value *)
- ENDPARALLEL;
- pic_size := size2;
-
- STORE(color, picture);
- (* print image *)
- WriteLn;
- FOR i:=m_size-1 TO 0 BY -1 DO
- FOR j:=0 TO m_size-1 DO
- WriteInt(picture[i,j],2)
- END;
- WriteLn;
- END
- END; (* while *)
- WriteString(" FINAL IMAGE");
-
- END image_rotation.
-
-